const defaultOptions = {
  lonkey: 'lng',
  latKey: 'lat'
} // 默认的经纬度key

const rowDistanceKey = '_distance' // 距离字段在row的键

/**
 * @desc    计算中心点附近最近的点位 （直线距离）
 * @param   lonLat         经纬度      Array;
 * @param   dataSource     比对数据源  Array;
 * @param   options         选项        Object
 * @param   options.lonkey  经度key     String
 * @param   options.latKey  纬度key     String
 * @returns null  || {row:[最近的一经纬度行数据],index:该条数据在dataSource的下标}
 * **/

export default function useComputedDistanceRow(lonLat, dataSource, options = defaultOptions) {
  if (!Array.isArray(lonLat) || !Array.isArray(dataSource)) return []
  // 按距离排序
  dataSource.sort((a, b) => {
    const alon = a[options.lonkey]
    const alat = a[options.latKey]
    const aDistance = AMap.GeometryUtil.distance(lonLat, [alon, alat]) || Infinity

    const blon = b[options.lonkey]
    const blat = b[options.latKey]
    const bDistance = AMap.GeometryUtil.distance(lonLat, [blon, blat]) || Infinity

    return aDistance - bDistance
  })
  return dataSource
  // const result = dataSource.reduce((ret, item, index) => {
  //   const lon = item[options.lonkey]
  //   const lat = item[options.latKey]
  //   !lon && console.error(`options.${options.lonkey} value 【${lon}】`)
  //   !lat && console.error(`options.${options.latKey} value 【${lat}】`)
  //   try {
  //     const distance = AMap.GeometryUtil.distance(lonLat, [lon, lat]) || Infinity
  //     const row = { ...item, [rowDistanceKey]: distance }
  //     dataSource[index] = row
  //     // 下标为0  就直接返回
  //     if (index == 0) {
  //       return row
  //     }

  //     // 比对距离最近的row 返回
  //     return ret[rowDistanceKey] < row[rowDistanceKey] ? ret : row
  //   } catch (e) {
  //     console.error('useComputedDistanceRow err', e)
  //   }
  // }, {})

  // return {
  //   row: result,
  //   index: dataSource.indexOf(result)
  // }
}
